\section{TeX文档样式设置}

\subsection{如何设置页面}
\LaTeX{}默认的页面设置往往不能满足用户的需求，当需要自定义页面大小时，可通过geometry宏包进行设置。
\begin{lstlisting}
\usepackage[a4paper, inner=1.5cm, outer=3cm, top=2cm,
bottom=3cm, bindingoffset=1cm]{geometry}
\end{lstlisting}

\subsection{如何设置标题页的格式}
使用\textbackslash{maketitle}命令可以输出标题，整个标题的格式是预设好的，并没有提供更多的修改标题格式的命令和选项，如果只是修改字体，可以直接包字体命令放在\textbackslash{title}、\textbackslash{author}等命令中，对于更复杂的标题格式，可以通过直接手工设置文字和段落格式排版得到。

单独成页的标题格式，如果要实现手工设置格式，可以在titlepage环境中排版。titlepage环境提供没有页码的单独一页，并使后面的内容页码从1开始计数。

还可以使用titling宏包详细设置标题、作者、日期在使用\textbackslash{maketitle}命令时的输出方式。

\subsection{如何设置首行缩进}
引入包indentfirst，然后通过命令setlength设定。
\begin{lstlisting}
	\usepackage{indentfirst}
	% 使用indentfirst扩展包，实现首行缩进
	\setlength{\parindent}{2em}
	% 首行缩进两个字符
\end{lstlisting}

还有一种方法更简洁，那就是直接声明文档类型为ctexart。
\begin{lstlisting}
\documentclass[12pt,twoside,UTF8]{ctexart}
\end{lstlisting}

上述设置是全局性的，当需要在某些段落取消缩进效果时，可在段落前使用noindent命令。
\begin{lstlisting}
\noindent
任何tex文本必须
\end{lstlisting}

\subsection{如何设置TeX文档类型}
TeX文档类型有两个参数，一个相当于word中的页面设置（可以设定字体大小、纸张大小等等），另一个是文档的用途（书籍、论文、演示文档等等）。
\begin{lstlisting}
\documentclass[12pt,twoside,UTF8]{ctexart}
\end{lstlisting}

\subsection{如何设置全局字体}
默认使用\textbackslash{setmainfont\{\}}命令设置全局字体。
\begin{lstlisting}
\setmainfont{YaHei Consolas Hybrid} % 设置全局字体
\end{lstlisting}

还可以通过引入xeCJK包，通过命令\textbackslash{setCJKmainfont\{\}}将中英文字体分别设置。
\begin{lstlisting}
\usepackage{xeCJK}
\setCJKmainfont{微软雅黑}
\end{lstlisting}

\subsection{如何设置行间距} % (fold)
\label{sub:如何设置行间距}
如果使用\CTeX 宏包，则默认行距为1.3倍。如需调整，设置

\begin{lstlisting}
linespread = 数值
\end{lstlisting}

接受一个浮点数值，设置行距倍数。
% subsection 如何设置行间距 (end)

\subsection{如何为标题和正文指定不同的字体}
使用宏包titlesec和fontspec的组合，就可为标题指定样式。
\begin{lstlisting}
\usepackage{titlesec}
\usepackage{fontspec}
\newfontfamily\arial{华文中宋}
\newcommand{\sectionfontsize}{\fontsize{40pt}{48pt}\selectfont}
\titleformat{\section}[hang]{\bfseries\arial\sectionfontsize}{\thesection}{1em}{}{}
\end{lstlisting}

\subsection{如何为代码指定等宽字体}
如\texttt{http://www.baidu.com}的效果，通过命令\textbackslash{texttt\{http://www.baidu.com\}}实现。

或者进行全局性的设置：
\begin{lstlisting}
	% 英文等宽字体
	\setmonofont{DejaVu Sans Mono}
\end{lstlisting}

\subsection{如何为listings代码区块设置全局样式}
通过listings扩展包提供的\textbackslash{lstset}命令。
\begin{lstlisting}
\lstset{
	basicstyle=\ttfamily,
	language=TeX,
	tabsize=2,
	frame=single
}
\end{lstlisting}

\subsection{如何只加粗代码区块中的特定关键词}
在引用前增加emph、和emphstyle选项来定制特定关键词和样式：
\begin{lstlisting}
emph={new,class},emphstyle=\bfseries
\end{lstlisting}

\subsection{如何加粗文字}
\textbf{加粗}字体使用命令\textbackslash{textbf\{bold face\}}，与Word不同，如果当前文字采用的字体没有加粗效果，则这条命令没有效果。

\subsection{如何设置页眉页脚的字体样式}

\subsection{如何设置带圈的脚注样式}
使用pifont宏包提供的带圈数字效果，例如\footnote{带圈数字}，配合eTeX的\textbackslash{numexpr}命令支持数字的计算。
\begin{lstlisting}
\usepackage{pifont}
\renewcommand\thefootnote{\ding{\numexpr171+\value{footnote}}}
\end{lstlisting}

\subsection{如何让脚注在每一页中重新编号}
脚注默认是每一章重新编号，如果没有章节，则是全文统一编号。如果要每页编号，则需要使用footmisc宏包。
\begin{lstlisting}
\usepackage[perpage]{footmisc}
\end{lstlisting}

\subsection{如何将参考文献编号的标注变成上标}
natbib宏包提供一种更符合论文写作样式的文献引用方式，即按照文献作者和年代显示文献的引用方式。natbib提供了命令来设置引用的输出格式\cite{2013-孟小峰，慈祥-p146-169}\cite{2010-潘征翔-p145-146}。
\begin{lstlisting}
\usepackage[super,square]{natbib}
\end{lstlisting}

\subsection{如何生成符合国标格式的文献列表}
Github站点中的\href{https://github.com/Haixing-Hu/GBT7714-2005-BibTeX-Style}{GBT7714-2005-BibTeX-Style项目}，就为解决这个问题而存在。下载其中的bst文件，按照步骤放置到指定目录并刷新。然后在导言区加入：
\begin{lstlisting}
\bibliographystyle{gbt7714-2005}
\end{lstlisting}

\subsection{为什么有的参考文献的超级链接不能跳转}
使用Jabref生成索引bibtexkey时，不能有特殊字符，如汉字的标点符号，否则，内部跳转命令无法生效。如(W3C，2014)应该修改为(W3C-2014)或者其他没有特殊字符的形式。

\subsection{如何在TeX中实现内容和格式的分离}
自定义命令（环境）宏，是进行\LaTeX 格式设定，达成内容与格式分离目标的利器。使用自定义的命令和环境把字体、字号、缩进等等各种琐细的内容包装起来，可以使文档结构清晰、易于维护修改。

如下面的代码统一设定表格对齐方式和字体：

\begin{lstlisting}
\let\originaltable\table
\let\endoriginaltable\endtable
\renewenvironment{table}[1][ht]{%
  \originaltable[#1]
  \centering%
  \small}%
  {\endoriginaltable}
\end{lstlisting}

\subsection{如何让目录之后的正文重新开始页码}
\begin{lstlisting}
\frontmatter % 开始前言目录，页码用罗马数字
\tableofcontents
\mainmatter % 开始正文，页码用阿拉伯数字
\end{lstlisting}

\subsection{如何在行内实现上下标效果}
在tex中，行内公式用前后美元符号表示\$……\$，上标用\^，如$y^2$；下标用\_，如$d_y$。

\subsection{如何将章节格式设置为文科类格式}
在ctexbook类型中，已经预设了常见中文的一些习惯，只需设置即可。
\begin{lstlisting}
\CTEXsetup[name={第,节},number={\chinese{section}}]{section}  			%  第一节
\CTEXsetup[name={,、},number={\chinese{subsection}},aftername={}]{subsection}		%  一、
\end{lstlisting}

\subsection{如何在章节之后插入独立的参考文献}
在导言区引入chapterbib，然后在每个独立的文件中放入\textbackslash{bibliographystyle}和\textbackslash{bibliography}即可。

\subsection{如何让参考文献不另起一页显示}
使用参数sectionbib，可以让参考文献作为小节，而不是章节出现在文章中。
\begin{lstlisting}
\usepackage[sectionbib]{chapterbib}
\end{lstlisting}

\subsection{如何控制图片的位置}
常用选项[htbp]是浮动格式：
『h』当前位置。将图形放置在正文文本中给出该图形环境的地方。如果本页所剩的页面不够，这一参数将不起作用。
『t』顶部。将图形放置在页面的顶部。
『b』底部。将图形放置在页面的底部。
『p』浮动页。将图形放置在一只允许有浮动对象的页面上。

一般使用[htb]这样的组合，只用[h]是没有用的。这样组合的意思就是latex会尽量满足排在前面的浮动格式，就是h-t-b这个顺序，让排版的效果尽量好。
!h 只是试图放在当前位置。如果页面剩下的部分放不下，还是会跑到下一页的。一般页言，用 [!h] 选项经常会出现不能正确放置的问题，所以常用 [ht]、[htbp] 等。

如果你确实需要把图片放在当前位置，不容改变，可以用float宏包的[H]选项。不过如果这样做，出现放不下的问题时需要手工调整。

\subsection{如何实现全局性地修改引用的样式}
要修改引用样式，通常的做法是这样：
\begin{lstlisting}
\begin{quote}
\kaishu
/php/匹配的是以p字符开始，紧接一个h，紧接一个p的文本。
\end{quote}
\end{lstlisting}
即在环境内部加上样式命令，但如果引用有多处，则需要在多处内部都加入样式命令，显然不够简洁。如何统一设定引用的样式呢？

\subsection{如何自定义列表显示效果}
在导言区引入以下宏包：
\begin{lstlisting}
\usepackage{enumitem}
\end{lstlisting}

引入宏包后，可以统一指定样式：
\begin{lstlisting}
\setlist[description]{font=\sffamily\bfseries}
\setlist[description]{labelindent=\parindent}
\setlist[1]{\labelindent=\parindent}

还可以设定列表的垂直间距、标签和文字之间的距离等等，如：

\setlist[description]{labelindent=\parindent, leftmargin=3cm, style=sameline, itemsep=\parskip, partopsep=0pt, parsep=\parskip, topsep=5pt}
\setlist[itemize]{labelindent=\parindent, leftmargin=*, itemsep=\parskip, partopsep=0pt, parsep=\parskip, topsep=5pt}
\setlist[enumerate]{labelindent=\parindent, leftmargin=*, itemsep=\parskip, partopsep=0pt, parsep=\parskip, topsep=5pt}
\end{lstlisting}

\subsection{如何定义提示、警告等特殊段落的样式}

\begin{lstlisting}
% 设置特殊段落格式
\usepackage{environ}
\usepackage[tikz]{bclogo,rotating}
\usepackage{tikz}
\usetikzlibrary{calc}
\usepackage{lipsum}
\DeclareGraphicsRule{.mps}{eps}{.mps}{}

\NewEnviron{myremark}[1]
  {\par\medskip\noindent
  \begin{tikzpicture}
    \node[inner sep=0pt] (box) {\parbox[t]{.99\textwidth}{%
      \begin{minipage}{.3\textwidth}
      \centering\tikz[scale=5]\node[scale=3,rotate=30]{\bclampe};
      \end{minipage}%
      \begin{minipage}{.65\textwidth}
      \textbf{#1}\par\smallskip
      \BODY
      \end{minipage}\hfill}%
    };
    \draw[red!75!black,line width=3pt]
      ( $ (box.north east) + (-5pt,3pt) $ ) -- ( $ (box.north east) + (0,3pt) $ ) -- ( $ (box.south east) + (0,-3pt) $ ) -- + (-5pt,0);
    \draw[red!75!black,line width=3pt]
      ( $ (box.north west) + (5pt,3pt) $ ) -- ( $ (box.north west) + (0,3pt) $ ) -- ( $ (box.south west) + (0,-3pt) $ ) -- + (5pt,0);
  \end{tikzpicture}\par\medskip%
}
\end{lstlisting}

\subsection{如何为行内文字添加边框和背景色}
使用xcolor宏包中的fcolorbox命令（不过没有圆角效果）。如\fcolorbox[gray]{0.8}[RGB]{250,250,250}{test}的实现代码如下：

\begin{lstlisting}
\fcolorbox[gray{0.8}[RGB]{250,250,250}{test}
\end{lstlisting}

\subsection{如何指定表格宽度}
默认情况下，表格宽度都是自动计算，当内容较多时，出现表格宽度过宽的问题，解决如下：

\begin{lstlisting}
\usepackage{tabularx}
\begin{tabularx}{\linewidth}{X|X}
……
\end{tabularx}
\end{lstlisting}

\subsection{如何消除表格横线与竖线之间的间距} % (fold)
\label{sub:如何消除表格横线与竖线之间的间距}
Booktabs宏包是专门为绘制三线表而设计的宏包，它的横线命令在前后具有不同的垂直间距，这就破坏了表格中竖线的效果。可通过booktabs提供的命令调整横线前后的垂直间距。

\begin{lstlisting}
\setlength{\aboverulesep}{0pt}
\setlength{\belowrulesep}{0pt}
\end{lstlisting}

如果只是希望控制横向表格线的粗细，而并不打算有额外的特性，makecell宏包提供的xhline是一个选择。

% subsetion 如何消除表格横线与竖线之间的间距 (end)

\subsection{如何设置超级链接的样式} % (fold)
\label{sub:如何设置超级链接的样式}
超级链接的默认样式是颜色框，不符合阅读习惯。进行如下配置，即可改成常规颜色模式：

\begin{lstlisting}
\usepackage[colorlinks = true]{hyperref}
\end{lstlisting}

% subsection 如何设置超级链接的样式 (end)

\subsection{如何只设定章节中段落的样式} % (fold)
\label{sub:如何只设定章节中段落的样式}
有时，需要将章节和目录中的段落，设定不同的样式，如章节正文段落前后宽松一些，而目录的段落前后紧凑一点。

\subsection{如何将pdf转换为word格式} % (fold)
\label{sub:如何将pdf转换为word格式}
在有些场景下，我们需要将pdf转为word，转换工具有很多，效果最好的还是Adobe Acrobat。直接另存就可以。
